import dayjs from 'dayjs'
import { FieldType } from '@/types/entity'

/**
 * 通用日期格式化（自动判断类型）
 */
export function formatDate(value: any): string {
  if (!value) return '-'
  
  const date = dayjs(value)
  if (!date.isValid()) return value
  
  // 根据值的格式自动判断
  const str = String(value)
  if (str.includes('T') || str.includes(' ')) {
    // 包含时间的格式
    return date.format('YYYY-MM-DD HH:mm:ss')
  } else if (str.match(/^\d{2}:\d{2}(:\d{2})?$/)) {
    // 只有时间
    return date.format('HH:mm:ss')
  } else {
    // 只有日期
    return date.format('YYYY-MM-DD')
  }
}

/**
 * 格式化日期时间
 */
export function formatDateTime(value: any, fieldType: FieldType): string {
  if (!value) return '-'
  
  const date = dayjs(value)
  if (!date.isValid()) return value
  
  switch (fieldType) {
    case FieldType.LOCAL_DATE:
      return date.format('YYYY-MM-DD')
    case FieldType.LOCAL_TIME:
      return date.format('HH:mm:ss')
    case FieldType.LOCAL_DATE_TIME:
      return date.format('YYYY-MM-DD HH:mm:ss')
    default:
      return value
  }
}

/**
 * 格式化数字
 */
export function formatNumber(value: any, scale?: number): string {
  if (value === null || value === undefined || value === '') return '-'
  
  const num = Number(value)
  if (isNaN(num)) return value
  
  if (scale !== undefined && scale > 0) {
    return num.toFixed(scale)
  }
  
  return num.toString()
}

/**
 * 获取字段显示值
 */
export function getFieldDisplayValue(value: any, fieldType: FieldType, scale?: number): string {
  if (value === null || value === undefined || value === '') return '-'
  
  switch (fieldType) {
    case FieldType.BOOLEAN:
      return value ? '是' : '否'
    case FieldType.LOCAL_DATE:
    case FieldType.LOCAL_TIME:
    case FieldType.LOCAL_DATE_TIME:
      return formatDateTime(value, fieldType)
    case FieldType.BIG_DECIMAL:
    case FieldType.DOUBLE:
      return formatNumber(value, scale)
    default:
      return String(value)
  }
}